import { NextRequest, NextResponse } from 'next/server'
import { createServerSupabaseClient } from '@/lib/supabase'
export async function GET(
request: NextRequest,
{ params }: { params: { id: string } }
) {
try {
const supabase = createServerSupabaseClient()
const bookId = params.id
// Get current user session
const authHeader = request.headers.get('authorization')
let user
try {
if (authHeader) {
const { data: { user: authUser }, error: authError } = await supabase.auth.getUser(authHeader.replace('Bearer ', ''))
if (!authError) user = authUser
} else {
const { data: { user: sessionUser }, error: sessionError } = await supabase.auth.getUser()
if (!sessionError) user = sessionUser
}
} catch (e) {}
if (!user) {
return NextResponse.json({ error: 'Authentication required' }, { status: 401 })
}
// Get GitHub integration
const { data: profile } = await supabase
.from('profiles')
.select('github_integrations')
.eq('id', user.id)
.single()
const integration = profile?.github_integrations?.[bookId]
if (!integration) {
return NextResponse.json({ error: 'GitHub integration not found' }, { status: 404 })
}
const owner = integration.github_username
const repo = integration.repository_name
const accessToken = integration.access_token
// Fetch commit history from GitHub
const commitsUrl = `https://api.github.com/repos/${owner}/${repo}/commits?per_page=50`
const commitsRes = await fetch(commitsUrl, {
headers: {
'Authorization': `Bearer ${accessToken}`,
'Accept': 'application/vnd.github.v3+json'
}
})
if (!commitsRes.ok) {
return NextResponse.json({ error: 'Failed to fetch commits from GitHub', status: commitsRes.status }, { status: 500 })
}
const commits = await commitsRes.json()
// Map to simplified commit objects
const commitList = (Array.isArray(commits) ? commits : []).map((c: any) => ({
sha: c.sha,
message: c.commit?.message,
author: c.commit?.author?.name || c.author?.login,
date: c.commit?.author?.date,
html_url: c.html_url
}))
return NextResponse.json({ commits: commitList })
} catch (error) {
return NextResponse.json({ error: 'Internal server error' }, { status: 500 })
}
}